import request from '@/utils/request'

// 文章列表接口参数
export interface ArticlesParams {
  current?: number
  pageSize?: number
  /** 推荐: weight_desc 最新：可以不用传 */
  sorter?: string
  stem?: string
  keyWord?: string
}

// 通用服务器返回格式
export interface ServiceResponse<T> {
  code: number
  message: string
  data: T // T 表示变化的类型(泛型)
}

// 获取面经列表返回数据
export interface ArticlesResponse {
  current: number
  pageSize: number
  pageTotal: number
  rows: ArticleRowItem[] // 文章列表
  total: number
}

// 文章列表项
export interface ArticleRowItem {
  id: string
  avatar: string
  collectFlag: number
  content: string
  createdAt: string
  creator: string
  likeCount: number
  likeFlag: number
  stem: string
  views: number
}

// 文章列表接口
export const getArticlesAPI = (
  params: ArticlesParams,
): Promise<ServiceResponse<ArticlesResponse>> => {
  return request.get('/h5/interview/query', {
    // 接口文档的 query 参数，在 axios 中，通过 params 配置项传递
    params: {
      current: params.current || 1,
      pageSize: params.pageSize || 10,
      sorter: params.sorter,
    },
  })
}

// 获取单个面经详情，返回值类型可复用之前的文章列表项
export const getArticleDetailAPI = (id: string): Promise<ServiceResponse<ArticleRowItem>> => {
  return request.get('/h5/interview/show', {
    params: { id: id },
  })
}

// 收藏、点赞题目接口参数
export interface OptArticleParams {
  /** 面经id */
  id: string
  /** 操作类型：1点赞，2收藏 */
  optType: number
}

// 收藏、点赞题目接口
export const optArticleAPI = (data: OptArticleParams): Promise<ServiceResponse<null>> => {
  return request.post('/h5/interview/opt', data)
}

// 获取收藏、点赞列表接口参数
export interface OptListParams {
  /** 操作类型：1点赞，2收藏 */
  optType: number
  /** 每页大小 */
  pageSize?: number
  /** 当前页 */
  page?: number
}

// 获取收藏、点赞列表接口
export const getOptListAPI = (
  params: OptListParams,
): Promise<ServiceResponse<ArticlesResponse>> => {
  return request.get('/h5/interview/opt/list', {
    params: {
      optType: params.optType,
      pageSize: params.pageSize || 10,
      page: params.page || 1,
    },
  })
}
